﻿//-----------------------------------------------------------------------
// <copyright file="BindingEnums.cs" company="tuliprules.org">
//     Copyright (c) 2010 tuplelister, tuliprules.org.
// </copyright>
// <summary>This is the .NET binding enumerations file.</summary>
//-----------------------------------------------------------------------

namespace Tulip.Engine.Models.ClosedWorld
{
    /// <summary>
    /// Enumeration of each kind of .NET type member that the runtime model can bind to. 
    /// </summary>
    public enum MemberKind
    {
        /// <summary>
        /// An unknown member kind.
        /// </summary>
        Unknown,

        /// <summary>
        /// A field member kind.
        /// </summary>
        Field,

        /// <summary>
        /// A read-only field member kind.
        /// </summary>
        FieldReadOnly,

        /// <summary>
        /// A constant member kind.
        /// </summary>
        Const,

        /// <summary>
        /// A property member kind.
        /// </summary>
        Property,

        /// <summary>
        /// A property get member kind.
        /// </summary>
        PropertyGet,

        /// <summary>
        /// A property set member kind.
        /// </summary>
        PropertySet,

        /// <summary>
        /// A method member kind.
        /// </summary>
        Method,

        /// <summary>
        /// A constructor member kind.
        /// </summary>
        Constructor,

        /// <summary>
        /// An event member kind.
        /// </summary>
        Event
    }

    /// <summary>
    /// Enumeration of each visibility specifier that may be used on a bound .NET type member.
    /// </summary>
    public enum MemberVisibility
    {
        /// <summary>
        /// The member visibility is unknown.
        /// </summary>
        Unknown,

        /// <summary>
        /// The member visibility is public.
        /// </summary>
        Public,

        /// <summary>
        /// The member visibility is internal.
        /// </summary>
        Internal,

        /// <summary>
        /// The member visibility is protected.
        /// </summary>
        Protected,

        /// <summary>
        /// The member visibility is protected internal.
        /// </summary>
        ProtectedInternal,

        /// <summary>
        /// The member visibility is private.
        /// </summary>
        Private
    }

    /// <summary>
    /// Enumeration of each kind of .NET type that the runtime model can bind to.
    /// </summary>
    public enum TypeKind
    {
        /// <summary>
        /// The type kind is unknown.
        /// </summary>
        Unknown,

        /// <summary>
        /// A class type kind.
        /// </summary>
        Class,

        /// <summary>
        /// A struct type kind.
        /// </summary>
        Struct,

        /// <summary>
        /// An enum type kind.
        /// </summary>
        Enum,

        /// <summary>
        /// A delegate type kind.
        /// </summary>
        Delegate
    }

    /// <summary>
    /// Enumeration of each visibility specifier that may be used on a bound .NET type.
    /// </summary>
    public enum TypeVisibility
    {
        /// <summary>
        /// The type visibility is unknown.
        /// </summary>
        Unknown,

        /// <summary>
        /// The type visibility is public.
        /// </summary>
        Public,

        /// <summary>
        /// The type visibility is internal.
        /// </summary>
        Internal,

        /// <summary>
        /// The type visibility is private.
        /// </summary>
        Private
    }
}
